﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Ecommerce.Model;

namespace Ecommerce.Admin.Controles
{
    public partial class ProdutosRelacionados : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                if (Request.QueryString["IdPro"] != null)
                {
                    int identificador = Convert.ToInt32(Request.QueryString["IdPro"]);
                    hddIdProduto.Value = identificador.ToString();
                    CarregarProdutos(identificador);
                }
            }
        }

        private void CarregarProdutos(int identificador)
        {
            var produtosNaoAssociados = new ProdutoModel().ListarProdutosRelacionadosNaoAssociados(identificador);
            produtosNaoAssociados.Remove(produtosNaoAssociados.Where(x => x.pro_idt_produto.Equals(identificador)).First());
            grvProdutos.DataSource = produtosNaoAssociados;
            grvProdutos.DataBind();

            var produtosAssociados = new ProdutoModel().ListarProdutosRelacionadosAssociados(identificador);
            grvProdutosAssociados.DataSource = produtosAssociados;
            grvProdutosAssociados.DataBind();
        }

        protected void grvProdutosAssociados_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                var produto = (tb_pro_produto)e.Row.DataItem;
                e.Row.Cells[0].Text = produto.pro_idt_produto.ToString();
                e.Row.Cells[1].Text = produto.pro_nom_produto;

                Button btnExcluir = (Button)e.Row.FindControl("btnExcluir");
                btnExcluir.CommandArgument = produto.pro_idt_produto.ToString();
                btnExcluir.CommandName = "Excluir";
            }
        }

        protected void grvProdutos_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                var produto = (tb_pro_produto)e.Row.DataItem;
                e.Row.Cells[1].Text = produto.pro_idt_produto.ToString();
                e.Row.Cells[2].Text = produto.pro_nom_produto;

                if (produto.pro_flg_produto_disponivel)
                    e.Row.Cells[3].Text = "Publicado";
                else
                    e.Row.Cells[3].Text = "Não Publicado";
            }
        }

        protected void btnAssociar_Click(object sender, EventArgs e)
        {
            List<tb_prr_produto_relacionado> produtos = new List<tb_prr_produto_relacionado>();
            tb_prr_produto_relacionado produto = default(tb_prr_produto_relacionado);
            int idt = Convert.ToInt32(hddIdProduto.Value);

            foreach (GridViewRow item in grvProdutos.Rows)
            {
                CheckBox ctrl = (CheckBox)item.FindControl("chkProduto");
                if (ctrl.Checked)
                {
                    produto = new tb_prr_produto_relacionado();
                    produto.pro_idt_produto_principal = Convert.ToInt32(hddIdProduto.Value);
                    produto.pro_idt_produto_associado = Convert.ToInt32(item.Cells[1].Text);
                    produto.prr_dat_criacao = DateTime.Now;
                    produtos.Add(produto);
                }
            }

            ProdutoModel model = new ProdutoModel();
            model.InserirProdutoRelacionado(produtos, idt);

            this.CarregarProdutos(idt);
        }

        protected void grvProdutosAssociados_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            ProdutoModel model = new ProdutoModel();
            Int32 idtProdutoPrincipal = Convert.ToInt32(hddIdProduto.Value);
            int idtProdutoAssociado = Convert.ToInt32(e.CommandArgument);
            model.ExcluirProdutoRelacionadoAssociado(idtProdutoPrincipal, idtProdutoAssociado);

            CarregarProdutos(idtProdutoPrincipal);
            UpdatePanel1.Update();
            UpdatePanel2.Update();
        }

        protected void grvProdutos_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            Int32 idtProdutoPrincipal = Convert.ToInt32(hddIdProduto.Value);
            CarregarProdutos(idtProdutoPrincipal);

            grvProdutos.PageIndex = e.NewPageIndex;
            grvProdutos.DataBind();
            UpdatePanel1.Update();
        }
    }
}